package base.design.test5Prototype.deepClone;

import java.io.*;

public class ClientTest {
    public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {
        //1,浅克隆
        ConcretePrototype type1=new ConcretePrototype();
        Apple apple=new Apple();
        apple.setName("苹果");
        type1.setApple(apple);

        ConcretePrototype type2 = type1.clone();
        System.out.println("浅克隆 对象 type1 和type2 是否是同一个对象---->"+(type1==type2));
        System.out.println("浅克隆对象type1 和type2 中的 apple 对象属性是否是同一个对象---->"+(type1.getApple()==type2.getApple()));

        System.out.println("############ 下面是深克隆 #########");
        //通过序列化的方式来进行深克隆（性能有影响）
        ObjectOutputStream outputStream=new ObjectOutputStream(new FileOutputStream("d:/object.txt"));
        outputStream.writeObject(type1);
        outputStream.close();

        //读取对象
        ObjectInputStream oin=new ObjectInputStream(new FileInputStream("d:/object.txt"));
        ConcretePrototype type3=(ConcretePrototype)oin.readObject();
        oin.close();
        System.out.println("");
        System.out.println("深克隆 对象 type1 和type2 是否是同一个对象---->"+(type1==type3));
        System.out.println("深克隆对象type1 和type2 中的 apple 对象属性是否是同一个对象---->"+(type1.getApple()==type3.getApple()));



    }
}
